// 1.引入axios模块
import axios from 'axios'
//2.引入qs模块
import qs from 'qs'
// import store from '../store'


// 环境的切换
// 开发环境: development
// 生产环境: production
//process.env 是属于node的环境变量配置项
let baseUrl = null
if(process.env.NODE_ENV === 'development'){
    // 开发环境
    baseUrl = '';
}else if(process.env.NODE_ENV === 'production'){
    //生产环境
    baseUrl = '';
}

//自定义axios模块
const instance = axios.create({
    baseURL:baseUrl,
    timeout:1000,
})

// 请求拦截
instance.interceptors.request.use(config=>{
    // console.group('本次请求的地址为:'+config.url)
    if(config.url !== '/api/userlogin'){
        if(sessionStorage.getItem('user')){
            //设置请求头
            config.headers.authorization = JSON.parse(sessionStorage.getItem('user')).token
        }
    }
    return config
},err=>{
    return Promise.reject(err)
})

// 响应拦截
instance.interceptors.response.use(res=>{
    console.group('本次响应的地址为:'+res.config.url)
    return res
},err=>{
    return Promise.reject(err)
})


//封装get请求
export function get(url,params=null){
    /**
     * new Promise()实例化中接收一个函数作为参数
     * resolve和reject是两个函数作为参数
     * resolve中接收成功的结果作为参数
     * reject中接收失败的结果作为参数
    */
   return new Promise((resolve,reject)=>{
        instance.get(url,{params}).then(res=>{
            // 状态由等待变为成功，传的参数作为then函数中成功函数的实参
            resolve(res.data)
        }).catch(err=>{
            reject(err.data)
        })
    })
   
}



// 封装post请求

export function post(url,params,isFile=false){
    
    // 1.设置请求头
    let config = {
        headers:{
            "Content-Type":"application/x-www-form-urlencoded"
        }
    }
    //3.处理表单的数据
    let data = qs.stringify(params);
    
    if(isFile){
        // 设置请求
        config= {
            headers:{
                "Content-Type":"multiple/form-data"
            }
        }

        //处理有文件的数据
         data = new FormData()
        for(let i in params){
            data.append(i,params[i])
        }

    }
    
    return new Promise((resolve,reject)=>{
        instance.post(url,data,config).then(res=>{
            resolve(res.data)
        }).catch(err=>{
            reject(err.data)
        })
    })

}
